/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package xmlparsing;

import Parallel.Preparser.Preparser;
import Sequential.Attribute;
import Sequential.ExampleImplementation;
import Sequential.Node;
import Sequential.Parser;
import java.awt.Dimension;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Stack;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.GroupLayout.ParallelGroup;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeSelectionModel;

/**
 *
 * @author zwirek
 */
public class Main {

    JTextArea jta;
    JTree t;

    public static void runParallel() {
        try {
            Parallel.ExampleImplemntation[] eis = {new Parallel.ExampleImplemntation(), new Parallel.ExampleImplemntation()
            };
            Parallel.Parser p = new Parallel.Parser("exm.xml", 2, eis);
////            Stack<Parallel.Node> v = p.v;
        } catch (Exception ex) {
            Logger.getLogger(MainParallel.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
//
//    public void runPreparsing() {
//        try {
//            long time0 = System.currentTimeMillis();
//            Preparser pre = new Preparser("exm.xml");
//            pre.preparse();
//            long time1 = (System.currentTimeMillis() - time0);
//            System.out.println("Wynik preparsowania: "+pre.nodePositions.size());
//            System.out.println("Preparsowanie zajęło " + time1 + "ms");
//        } catch (Exception ex) {
//            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
//        }
//    }

    public void runSeq() {
        try {
            ExampleImplementation ei = new ExampleImplementation();
            Parser p = new Parser("exm.xml", ei);
            try {
                long time0 = System.currentTimeMillis();
                Node n = p.parse();
                long time1 = (System.currentTimeMillis() - time0);
                System.out.println("Parsowanie zajęło " + time1 + "ms");
//                n.print();
//                JFrame f = new JFrame();
//                //f.setLayout(new GridLayout(2, 1,10,10));
//                jta = new JTextArea();
//                jta.setLineWrap(true);
//                jta.setSize(800, 200);
//                jta.setPreferredSize(new Dimension(800, 200));
//                TreeNode tn = new TreeNode(n.getName(), n);
//                createNodes(tn, n);
//                t = new JTree(tn);
//                t.addTreeSelectionListener(new MyTreeSelectionListener());
//                JScrollPane jsc = new JScrollPane(t);
//                JScrollPane jsc2 = new JScrollPane(jta);
//                t.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
//                f.add(jsc);
//                //f.add(jta);
//                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//                f.setSize(300, 600);
//                f.setVisible(true);
//                JFrame f2 = new JFrame();
//                f2.add(jsc2);
//                f2.setSize(400, 400);
//                f2.setLocation(310, 0);
//                f2.setVisible(true);

            } catch (Exception ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
//                new Main().runParallel();
                new Main().runSeq();
//                new Main().runPreparsing();
            }
        });
    }
//    private void createNodes(DefaultMutableTreeNode tn, Node n) {
//        try{
//            for (Node i : n.getNodes()) {
//                TreeNode tn1 = new TreeNode(i.getName(), i);
//                createNodes(tn1, i);
//                tn.add(tn1);
//            }
//        }catch(NullPointerException e){}
//    }
//    private class TreeNode extends DefaultMutableTreeNode {
//
//        private Node n;
//
//        public TreeNode(Object userObject, Node n) {
//            super(userObject);
//            this.n = n;
//        }
//    }
//
//    private class MyTreeSelectionListener implements TreeSelectionListener {
//
//        public void valueChanged(TreeSelectionEvent e) {
//            TreeNode tn = (TreeNode) t.getLastSelectedPathComponent();
//            if (tn == null) {
//                return;
//            }
//            String all = "" + tn.n.getText();
////            for(String s:tn.n.getText()){
////                if(!s.isEmpty())
////                all+=s.trim()+"\n";
////            }
//            String par = "Parametry:\n";
//            try{
//                for (Attribute a : tn.n.getAtt()) {
//                    par += a.getName() + "=" + a.getValue() + "\n";
//                }
//            }catch(NullPointerException ex){
//            }
//            par += "====================================================\n"
//                    + "Value:\n";
//            all = par + all;
//            jta.setText(all);
//            jta.invalidate();
//            jta.revalidate();
//        }
//    }
}
